home *** CD-ROM | disk | FTP | other *** search
/ User's Choice Windows CD / User's Choice Windows CD (CMS Software)(1993).iso / utility3 / wtj008.zip / NOTBAD.ZIP / WINAPP.CPP < prev    next >
C/C++ Source or Header  |  1992-06-15  |  16KB  |  734 lines

  1. // winapp.cpp
  2. #include<windows.h>
  3. #include"winapp.h"
  4.  
  5. HINSTANCE WinApplication::ApphInstance;
  6. HINSTANCE WinApplication::hPrevInstance;
  7. LPSTR WinApplication::lpszCmdLine;
  8. int WinApplication::nCmdShow;
  9.  
  10. int WinApplication::Run(void)    // default message loop processing
  11.     {
  12.     MSG msg;
  13.  
  14.     while(GetMessage(&msg, NULL, 0, 0))
  15.         {
  16.         TranslateMessage(&msg);
  17.         DispatchMessage(&msg);
  18.         }
  19.     return msg.wParam;
  20.     }
  21.  
  22. WinClass::WinClass(void)
  23.     {
  24.     style = NOSTYLE;
  25.     lpfnWndProc = DefWindowProc;
  26.     cbClsExtra = NOEXTRABYTES;
  27.     cbWndExtra = NOEXTRABYTES;
  28.     hInstance = NULL;
  29.     hIcon = LoadIcon(NULL, IDI_APPLICATION);
  30.     hCursor = LoadCursor(NULL, IDC_ARROW);
  31.     hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  32.     lpszMenuName = NULL;
  33.     lpszClassName = NULL;
  34.     class_registered = FALSE;
  35.     }
  36.  
  37. void WinClass::ClassRegister(void)
  38.     {
  39.         // since 'this' is derived from WNDCLASS, it's passed as one
  40.     RegisterClass(this);
  41.     class_registered = TRUE;
  42.     }
  43.  
  44. BOOL WinClass::ClassRegistered(void)   
  45.     { 
  46.     if(class_registered)
  47.         return TRUE;
  48.     if(!lpszClassName || !hInstance)
  49.         return FALSE;
  50.  
  51.     WNDCLASS wndclass;
  52.     
  53.     if(GetClassInfo(hInstance,lpszClassName,&wndclass))
  54.         {
  55.         LPCSTR menuName = lpszMenuName;
  56.         HINSTANCE hInst = hInstance;
  57.         LPCSTR className = lpszClassName;
  58.         WNDCLASS *wc = this;
  59.         *wc = wndclass;         // structure assignment
  60.         lpszClassName = className;
  61.         lpszMenuName = menuName;
  62.         hInstance = hInst;
  63.         return class_registered = TRUE;
  64.         }
  65.     return FALSE;
  66.     }
  67.  
  68.  
  69. WinHandle::WinHandle(void)
  70.     {
  71.     hWnd = NULL;
  72.     classname = (LPSTR)"WinApplication";
  73.     windowname = (LPSTR)"WinApplication:Window";
  74.     winstyle = 0;
  75.     upper_left_x = upper_left_y = winwidth = winheight = 0;
  76.     winParent = NULL;
  77.     menu = NULL;
  78.     hInstance = 0;
  79.     lpParam = NULL;
  80.     }
  81.  
  82. BOOL WinHandle::Create(void)
  83.     {
  84.     if(hWnd)    // if window's already created, return TRUE
  85.         return TRUE;
  86.  
  87.     hWnd = CreateWindow(classname,windowname,winstyle,upper_left_x,
  88.         upper_left_y,winwidth,winheight,winParent,menu,hInstance,
  89.         lpParam);
  90.  
  91.     return (hWnd ? TRUE : FALSE);
  92.     }
  93.  
  94. Window::Window(char *winname)
  95.     {
  96.     SetClassInstance();         // insert instance handle
  97.     SetWinInstance(GetInstance());
  98.     SetClassName(winname);
  99.     SetWinName(winname);
  100.     DefaultDisplay();
  101.     previously_visible = FALSE;
  102.     hWnd = 0;
  103.     SetClassWinXbytes(WINAPP_RESERVED);
  104.     lpfnWndProc = DispatchMessage;
  105.     };
  106.  
  107.     // displays window and creates if not already created
  108. BOOL Window::Display(void)
  109.     {
  110.     Register();
  111.     if(!Create())
  112.         return FALSE;
  113.     Show();
  114.     Update();
  115.     return TRUE;
  116.     }
  117.  
  118. BOOL Window::Display(int display_style)
  119.     {
  120.     current_display = display_style;
  121.     return Display();
  122.     }
  123.  
  124. BOOL Window::ClassRegistered(void)
  125.     {
  126.     if(WinClass::ClassRegistered())
  127.         {
  128. //        if(!UserWndProc)
  129. //            SetClassWinProc(lpfnWndProc);
  130.         return TRUE;
  131.         }
  132.     return FALSE;
  133.     }
  134.     // should call SetClassInstance and SetClassName if not called
  135.  
  136. void Window::RegisterMDIChild(void)
  137.     {
  138.     lpfnWndProc = Window::MDIChildWndProc;
  139.     Register();
  140.     }
  141.         
  142. void Window::Register(void)
  143.     {
  144.     if(!ClassRegistered())         // if class not registered
  145.         {
  146.         if(!GetClassName())         // if class name not set
  147.             SetClassName("WinApplication");
  148.         ClassRegister();           // register the class
  149.         }
  150.     }
  151.  
  152. BOOL Window::Create(void)
  153.     {
  154.     Register();
  155.     WHdl.hInstance = GetInstance();
  156.     WHdl.classname = lpszClassName;
  157.     WHdl.lpParam = (LPSTR)this;
  158.     return WHdl.Create();
  159.     }
  160.  
  161. void Window::Paint(void)     // paints window
  162.     {
  163.     PAINTSTRUCT ps;
  164.  
  165.     BeginPaint(hWnd, &ps);
  166.     EndPaint(hWnd, &ps);
  167.     }
  168.  
  169. void Window::SetClassIcon(LPSTR iconname)
  170.     {
  171.     if(hInstance)
  172.         hIcon = LoadIcon(hInstance,iconname);
  173.     }
  174.  
  175. LRESULT CALLBACK Window::MDIChildWndProc(HWND hWnd, UINT msg, WPARAM wParam, 
  176.     LPARAM lParam)
  177.     {
  178. //    pWindow = (void *)GetPointer(hWnd);
  179.  
  180.     if(msg == WM_CREATE)
  181.         {
  182. #if defined(FIX)
  183.         LONG l = (void *)((LPMDICREATESTRUCT)
  184.             ((LPCREATESTRUCT)lParam)->lpCreateParams)->lParam;
  185.         pWindow = (void *)l;
  186. #endif
  187.  
  188. //        SetPointer(hWnd, pWindow);
  189. //        ((Window *)pWindow)->hWnd = hWnd;
  190.         }
  191. //    if(pWindow && ((Window *)pWindow)->UserWndProc)
  192. //        return ((Window *)pWindow)->UserWndProc(hWnd, msg, wParam, lParam);
  193.     return DefMDIChildProc(hWnd, msg, wParam, lParam);
  194.     }
  195.  
  196. void pascal Window::DWP(void)
  197.     {
  198.     MsgReturnValue = DefWindowProc(hWnd,msg,wParam,lParam);
  199.     }
  200.  
  201. LRESULT CALLBACK DispatchMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
  202.     {
  203.     Window *w = (Window *)GetPointer(hWnd);
  204.  
  205.     if(msg == WM_CREATE)
  206.         {
  207.         w = (Window *)((LPCREATESTRUCT)lParam)->lpCreateParams;
  208.         SetPointer(hWnd, w);
  209.         w->hWnd = hWnd;
  210.         }
  211.  
  212.     if(!w)
  213.         return DefWindowProc(hWnd, msg, wParam, lParam);
  214.  
  215.     w->wParam = wParam;
  216.     w->lParam = lParam;
  217.     w->msg = msg;
  218.     w->MsgReturnValue = 0L;
  219.  
  220.     if(msg < WM_USER)
  221.         switch(msg)
  222.             {
  223.             case WM_NULL:
  224.                 w->WMNULL();
  225.                 break;
  226.  
  227.             case WM_CREATE:
  228.                 w->WMCREATE();
  229.                 break;
  230.  
  231.             case WM_DESTROY:
  232.                 w->WMDESTROY();
  233.                 break;
  234.  
  235.             case WM_MOVE:
  236.                 w->WMMOVE();
  237.                 break;
  238.  
  239.             case WM_SIZE:
  240.                 w->WMSIZE();
  241.                 break;
  242.  
  243.             case WM_ACTIVATE:
  244.                 w->WMACTIVATE();
  245.                 break;
  246.  
  247.             case WM_SETFOCUS:
  248.                 w->WMSETFOCUS();
  249.                 break;
  250.  
  251.             case WM_KILLFOCUS:
  252.                 w->WMKILLFOCUS();
  253.                 break;
  254.  
  255.             case WM_ENABLE:
  256.                 w->WMENABLE();
  257.                 break;
  258.  
  259.             case WM_SETREDRAW:
  260.                 w->WMSETREDRAW();
  261.                 break;
  262.  
  263.             case WM_SETTEXT:
  264.                 w->WMSETTEXT();
  265.                 break;
  266.  
  267.             case WM_GETTEXT:
  268.                 w->WMGETTEXT();
  269.                 break;
  270.  
  271.             case WM_GETTEXTLENGTH:
  272.                 w->WMGETTEXTLENGTH();
  273.                 break;
  274.  
  275.             case WM_PAINT:
  276.                 w->WMPAINT();
  277.                 break;
  278.  
  279.             case WM_CLOSE:
  280.                 w->WMCLOSE();
  281.                 break;
  282.  
  283.             case WM_QUERYENDSESSION:
  284.                 w->WMQUERYENDSESSION();
  285.                 break;
  286.  
  287.             case WM_QUIT:
  288.                 w->WMQUIT();
  289.                 break;
  290.  
  291.             case WM_QUERYOPEN:
  292.                 w->WMQUERYOPEN();
  293.                 break;
  294.  
  295.             case WM_ERASEBKGND:
  296.                 w->WMERASEBKGND();
  297.                 break;
  298.  
  299.             case WM_SYSCOLORCHANGE:
  300.                 w->WMSYSCOLORCHANGE();
  301.                 break;
  302.  
  303.             case WM_ENDSESSION:
  304.                 w->WMENDSESSION();
  305.                 break;
  306.  
  307.             case WM_SHOWWINDOW:
  308.                 w->WMSHOWWINDOW();
  309.                 break;
  310.  
  311.             case WM_CTLCOLOR:
  312.                 w->WMCTLCOLOR();
  313.                 break;
  314.  
  315.             case WM_WININICHANGE:
  316.                 w->WMWININICHANGE();
  317.                 break;
  318.  
  319.             case WM_DEVMODECHANGE:
  320.                 w->WMDEVMODECHANGE();
  321.                 break;
  322.  
  323.             case WM_ACTIVATEAPP:
  324.                 w->WMACTIVATEAPP();
  325.                 break;
  326.  
  327.             case WM_FONTCHANGE:
  328.                 w->WMFONTCHANGE();
  329.                 break;
  330.  
  331.             case WM_TIMECHANGE:
  332.                 w->WMTIMECHANGE();
  333.                 break;
  334.  
  335.             case WM_CANCELMODE:
  336.                 w->WMCANCELMODE();
  337.                 break;
  338.  
  339.             case WM_SETCURSOR:
  340.                 w->WMSETCURSOR();
  341.                 break;
  342.  
  343.             case WM_MOUSEACTIVATE:
  344.                 w->WMMOUSEACTIVATE();
  345.                 break;
  346.  
  347.             case WM_CHILDACTIVATE:
  348.                 w->WMCHILDACTIVATE();
  349.                 break;
  350.  
  351.             case WM_QUEUESYNC:
  352.                 w->WMQUEUESYNC();
  353.                 break;
  354.  
  355.             case WM_GETMINMAXINFO:
  356.                 w->WMGETMINMAXINFO();
  357.                 break;
  358.  
  359. //            case WM_PAINTICON:
  360. //                w->WMPAINTICON();
  361. //                break;
  362.  
  363.             case WM_ICONERASEBKGND:
  364.                 w->WMICONERASEBKGND();
  365.                 break;
  366.  
  367.             case WM_NEXTDLGCTL:
  368.                 w->WMNEXTDLGCTL();
  369.                 break;
  370.  
  371.             case WM_SPOOLERSTATUS:
  372.                 w->WMSPOOLERSTATUS();
  373.                 break;
  374.  
  375.             case WM_DRAWITEM:
  376.                 w->WMDRAWITEM();
  377.                 break;
  378.  
  379.             case WM_MEASUREITEM:
  380.                 w->WMMEASUREITEM();
  381.                 break;
  382.  
  383.             case WM_DELETEITEM:
  384.                 w->WMDELETEITEM();
  385.                 break;
  386.  
  387.             case WM_VKEYTOITEM:
  388.                 w->WMVKEYTOITEM();
  389.                 break;
  390.  
  391.             case WM_CHARTOITEM:
  392.                 w->WMCHARTOITEM();
  393.                 break;
  394.  
  395.             case WM_SETFONT:
  396.                 w->WMSETFONT();
  397.                 break;
  398.  
  399.             case WM_GETFONT:
  400.                 w->WMGETFONT();
  401.                 break;
  402.  
  403.             case WM_QUERYDRAGICON:
  404.                 w->WMQUERYDRAGICON();
  405.                 break;
  406.  
  407.             case WM_COMPAREITEM:
  408.                 w->WMCOMPAREITEM();
  409.                 break;
  410.  
  411.             case WM_COMPACTING:
  412.                 w->WMCOMPACTING();
  413.                 break;
  414.  
  415.             case WM_NCCREATE:
  416.                 w->WMNCCREATE();
  417.                 break;
  418.  
  419.             case WM_NCDESTROY:
  420.                 w->WMNCDESTROY();
  421.                 break;
  422.  
  423.             case WM_NCCALCSIZE:
  424.                 w->WMNCCALCSIZE();
  425.                 break;
  426.  
  427.             case WM_NCHITTEST:
  428.                 w->WMNCHITTEST();
  429.                 break;
  430.  
  431.             case WM_NCPAINT:
  432.                 w->WMNCPAINT();
  433.                 break;
  434.  
  435.             case WM_NCACTIVATE:
  436.                 w->WMNCACTIVATE();
  437.                 break;
  438.  
  439.             case WM_GETDLGCODE:
  440.                 w->WMGETDLGCODE();
  441.                 break;
  442.  
  443.             case WM_NCMOUSEMOVE:
  444.                 w->WMNCMOUSEMOVE();
  445.                 break;
  446.  
  447.             case WM_NCLBUTTONDOWN:
  448.                 w->WMNCLBUTTONDOWN();
  449.                 break;
  450.  
  451.             case WM_NCLBUTTONUP:
  452.                 w->WMNCLBUTTONUP();
  453.                 break;
  454.  
  455.             case WM_NCLBUTTONDBLCLK:
  456.                 w->WMNCLBUTTONDBLCLK();
  457.                 break;
  458.  
  459.             case WM_NCRBUTTONDOWN:
  460.                 w->WMNCRBUTTONDOWN();
  461.                 break;
  462.  
  463.             case WM_NCRBUTTONUP:
  464.                 w->WMNCRBUTTONUP();
  465.                 break;
  466.  
  467.             case WM_NCRBUTTONDBLCLK:
  468.                 w->WMNCRBUTTONDBLCLK();
  469.                 break;
  470.  
  471.             case WM_NCMBUTTONDOWN:
  472.                 w->WMNCMBUTTONDOWN();
  473.                 break;
  474.  
  475.             case WM_NCMBUTTONUP:
  476.                 w->WMNCMBUTTONUP();
  477.                 break;
  478.  
  479.             case WM_NCMBUTTONDBLCLK:
  480.                 w->WMNCMBUTTONDBLCLK();
  481.                 break;
  482.  
  483.             case WM_KEYDOWN:
  484.                 w->WMKEYDOWN();
  485.                 break;
  486.  
  487.             case WM_KEYUP:
  488.                 w->WMKEYUP();
  489.                 break;
  490.  
  491.             case WM_CHAR:
  492.                 w->WMCHAR();
  493.                 break;
  494.  
  495.             case WM_DEADCHAR:
  496.                 w->WMDEADCHAR();
  497.                 break;
  498.  
  499.             case WM_SYSKEYDOWN:
  500.                 w->WMSYSKEYDOWN();
  501.                 break;
  502.  
  503.             case WM_SYSKEYUP:
  504.                 w->WMSYSKEYUP();
  505.                 break;
  506.  
  507.             case WM_SYSCHAR:
  508.                 w->WMSYSCHAR();
  509.                 break;
  510.  
  511.             case WM_SYSDEADCHAR:
  512.                 w->WMSYSDEADCHAR();
  513.                 break;
  514.  
  515.             case WM_KEYLAST:
  516.                 w->WMKEYLAST();
  517.                 break;
  518.  
  519.             case WM_INITDIALOG:
  520.                 w->WMINITDIALOG();
  521.                 break;
  522.  
  523.             case WM_COMMAND:
  524.                 w->WMCOMMAND();
  525.                 break;
  526.  
  527.             case WM_SYSCOMMAND:
  528.                 w->WMSYSCOMMAND();
  529.                 break;
  530.  
  531.             case WM_TIMER:
  532.                 w->WMTIMER();
  533.                 break;
  534.  
  535.             case WM_HSCROLL:
  536.                 w->WMHSCROLL();
  537.                 break;
  538.  
  539.             case WM_VSCROLL:
  540.                 w->WMVSCROLL();
  541.                 break;
  542.  
  543.             case WM_INITMENU:
  544.                 w->WMINITMENU();
  545.                 break;
  546.  
  547.             case WM_INITMENUPOPUP:
  548.                 w->WMINITMENUPOPUP();
  549.                 break;
  550.  
  551.             case WM_MENUSELECT:
  552.                 w->WMMENUSELECT();
  553.                 break;
  554.  
  555.             case WM_MENUCHAR:
  556.                 w->WMMENUCHAR();
  557.                 break;
  558.  
  559.             case WM_ENTERIDLE:
  560.                 w->WMENTERIDLE();
  561.                 break;
  562.  
  563.             case WM_MOUSEFIRST:
  564.                 w->WMMOUSEMOVE();
  565.                 break;
  566.  
  567.             case WM_LBUTTONDOWN:
  568.                 w->WMLBUTTONDOWN();
  569.                 break;
  570.  
  571.             case WM_LBUTTONUP:
  572.                 w->WMLBUTTONUP();
  573.                 break;
  574.  
  575.             case WM_LBUTTONDBLCLK:
  576.                 w->WMLBUTTONDBLCLK();
  577.                 break;
  578.  
  579.             case WM_RBUTTONDOWN:
  580.                 w->WMRBUTTONDOWN();
  581.                 break;
  582.  
  583.             case WM_RBUTTONUP:
  584.                 w->WMRBUTTONUP();
  585.                 break;
  586.  
  587.             case WM_RBUTTONDBLCLK:
  588.                 w->WMRBUTTONDBLCLK();
  589.                 break;
  590.  
  591.             case WM_MBUTTONDOWN:
  592.                 w->WMMBUTTONDOWN();
  593.                 break;
  594.  
  595.             case WM_MBUTTONUP:
  596.                 w->WMMBUTTONUP();
  597.                 break;
  598.  
  599.             case WM_MBUTTONDBLCLK:
  600.                 w->WMMOUSELAST();
  601.                 break;
  602.  
  603.             case WM_PARENTNOTIFY:
  604.                 w->WMPARENTNOTIFY();
  605.                 break;
  606.  
  607.             case WM_MDICREATE:
  608.                 w->WMMDICREATE();
  609.                 break;
  610.  
  611.             case WM_MDIDESTROY:
  612.                 w->WMMDIDESTROY();
  613.                 break;
  614.  
  615.             case WM_MDIACTIVATE:
  616.                 w->WMMDIACTIVATE();
  617.                 break;
  618.  
  619.             case WM_MDIRESTORE:
  620.                 w->WMMDIRESTORE();
  621.                 break;
  622.  
  623.             case WM_MDINEXT:
  624.                 w->WMMDINEXT();
  625.                 break;
  626.  
  627.             case WM_MDIMAXIMIZE:
  628.                 w->WMMDIMAXIMIZE();
  629.                 break;
  630.  
  631.             case WM_MDITILE:
  632.                 w->WMMDITILE();
  633.                 break;
  634.  
  635.             case WM_MDICASCADE:
  636.                 w->WMMDICASCADE();
  637.                 break;
  638.  
  639.             case WM_MDIICONARRANGE:
  640.                 w->WMMDIICONARRANGE();
  641.                 break;
  642.  
  643.             case WM_MDIGETACTIVE:
  644.                 w->WMMDIGETACTIVE();
  645.                 break;
  646.  
  647.             case WM_MDISETMENU:
  648.                 w->WMMDISETMENU();
  649.                 break;
  650.  
  651.             case WM_CUT:
  652.                 w->WMCUT();
  653.                 break;
  654.  
  655.             case WM_COPY:
  656.                 w->WMCOPY();
  657.                 break;
  658.  
  659.             case WM_PASTE:
  660.                 w->WMPASTE();
  661.                 break;
  662.  
  663.             case WM_CLEAR:
  664.                 w->WMCLEAR();
  665.                 break;
  666.  
  667.             case WM_UNDO:
  668.                 w->WMUNDO();
  669.                 break;
  670.  
  671.             case WM_RENDERFORMAT:
  672.                 w->WMRENDERFORMAT();
  673.                 break;
  674.  
  675.             case WM_RENDERALLFORMATS:
  676.                 w->WMRENDERALLFORMATS();
  677.                 break;
  678.  
  679.             case WM_DESTROYCLIPBOARD:
  680.                 w->WMDESTROYCLIPBOARD();
  681.                 break;
  682.  
  683.             case WM_DRAWCLIPBOARD:
  684.                 w->WMDRAWCLIPBOARD();
  685.                 break;
  686.  
  687.             case WM_PAINTCLIPBOARD:
  688.                 w->WMPAINTCLIPBOARD();
  689.                 break;
  690.  
  691.             case WM_VSCROLLCLIPBOARD:
  692.                 w->WMVSCROLLCLIPBOARD();
  693.                 break;
  694.  
  695.             case WM_SIZECLIPBOARD:
  696.                 w->WMSIZECLIPBOARD();
  697.                 break;
  698.  
  699.             case WM_ASKCBFORMATNAME:
  700.                 w->WMASKCBFORMATNAME();
  701.                 break;
  702.  
  703.             case WM_CHANGECBCHAIN:
  704.                 w->WMCHANGECBCHAIN();
  705.                 break;
  706.  
  707.             case WM_HSCROLLCLIPBOARD:
  708.                 w->WMHSCROLLCLIPBOARD();
  709.                 break;
  710.  
  711.             case WM_QUERYNEWPALETTE:
  712.                 w->WMQUERYNEWPALETTE();
  713.                 break;
  714.  
  715.             case WM_PALETTEISCHANGING:
  716.                 w->WMPALETTEISCHANGING();
  717.                 break;
  718.  
  719.             case WM_PALETTECHANGED:
  720.                 w->WMPALETTECHANGED();
  721.                 break;
  722.  
  723.             default:
  724.                 w->DWP();
  725.                 break;
  726.             }
  727.     else
  728.         {
  729.         w->UserMessageUsed = FALSE;
  730.         w->UserMessages();
  731.         }
  732.     return w->MsgReturnValue;
  733.     }
  734.